package com.qingcloud.adminbackend.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qingcloud.adminbackend.entity.role.RolePageRequest;
import com.qingcloud.adminbackend.entity.role.SysRole;
import com.qingcloud.adminbackend.entity.role.SysRoleDto;
import com.qingcloud.adminbackend.entity.role.SysRoleTableDTO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * 角色表 Mapper 接口
 * </p>
 *
 * @author wangjinnan
 * @since 2018-12-19
 */
@Component
public interface SysRoleMapper extends BaseMapper<SysRole> {
    /**
     * 用户Type查询用户身份
     *
     * @param roleType
     * @return
     */
    List<SysRole> getRoleWithRoleType(@Param("roleType") String roleType);

    /**
     * 根据用户Id查询用户身份
     *
     * @param roleType
     * @param userId
     * @return
     */
    List<SysRole> getRoleWithUser(@Param("roleType") String roleType, @Param("userId") String userId);

    List<SysRole> finRoleByUserId(@Param("id") String userId);


    /**
     * 通过功能模块编号获取对应角色
     */
    List<SysRole> findRolesByFunctionId(@Param("functionId") String functionId);

    int addSysRole(SysRoleDto role);

    int updateSysRole(SysRoleDto role);

    int deleteByRoleIds(@Param("roleIds") List<Integer> roleIds, @Param("loginUserId") String loginUserId, @Param("modifyDate") Date modifyDate);

    List<SysRole> findRolesByIds(@Param("roleIds") List<Integer> roleIds);

    List<SysRole> findRolesByName(@Param("name") String name);

    List<SysRole> findRoles();

    Integer countRoleForValidName(@Param("name") String name, @Param("ignoreId") Integer ignoreId);

    /**
     * 分页查询
     *
     * @param page      分页对象
     * @param pageParam 搜索参数
     * @return 身份表格分页数据
     */
    IPage<SysRoleTableDTO> searchPage(@Param("page") Page<SysRole> page,
                                      @Param("param") RolePageRequest pageParam,
                                      @Param("businessSet") Set<Integer> businessSet);

    /**
     * 通过角色编号查询所有功能编号
     *
     * @param id 角色ID
     */
    List<String> findFunctionIdByRoleId(@Param("roleId") Integer roleId);

}
